package futbol.tacticas.concursantes2007.TacticaTururu;

import java.util.Random;

public class Alineacion {


	private int[] alineacion = new int[Constantes.LINEAS_JUEGO];

	private Alineacion (int [] alineacion) {

		this.alineacion[Constantes.LINEA_DEFENSIVA] = alineacion[Constantes.LINEA_DEFENSIVA];
		this.alineacion[Constantes.LINEA_CENTRO_CAMPO_ATRAS] = alineacion[Constantes.LINEA_CENTRO_CAMPO_ATRAS];
		this.alineacion[Constantes.LINEA_CENTRO_CAMPO_ALANTE] = alineacion[Constantes.LINEA_CENTRO_CAMPO_ALANTE];
		this.alineacion[Constantes.LINEA_DELANTERA] = alineacion[Constantes.LINEA_DELANTERA];
	}

	public Alineacion (final String valores) {
		alineacion[Constantes.LINEA_DEFENSIVA] = Integer.parseInt(Character.toString(valores.charAt(0)));
		alineacion[Constantes.LINEA_CENTRO_CAMPO_ATRAS] = Integer.parseInt(Character.toString(valores.charAt(2)));
		alineacion[Constantes.LINEA_CENTRO_CAMPO_ALANTE] = Integer.parseInt(Character.toString(valores.charAt(4)));
		alineacion[Constantes.LINEA_DELANTERA] = Integer.parseInt(Character.toString(valores.charAt(6)));
	}

    public static Alineacion generarAlineacionAleatoria() {
        int jugadoresLibres;
        int[] miAlineacion = new int[Constantes.LINEAS_JUEGO];

        miAlineacion[Constantes.LINEA_DEFENSIVA] = 0;
        miAlineacion[Constantes.LINEA_CENTRO_CAMPO_ATRAS] = 0;
        miAlineacion[Constantes.LINEA_CENTRO_CAMPO_ALANTE] = 0;
        miAlineacion[Constantes.LINEA_DELANTERA] = 0;

        do {
            // se situan los jugadores en la linea defensiva y se quita uno, que es el portero
            jugadoresLibres = Constantes.JUGADORES_EN_TERRENO - 1;
            miAlineacion[Constantes.LINEA_DEFENSIVA] = Math.abs(new Random().nextInt()) % (Constantes.MAXIMO_JUGADORES_LINEA +
                2);

            // se situan los jugadores en la linea del centro del campo atras
            jugadoresLibres -= miAlineacion[Constantes.LINEA_DEFENSIVA];
            miAlineacion[Constantes.LINEA_CENTRO_CAMPO_ATRAS] = Math.abs(new Random().nextInt()) % (Constantes.MAXIMO_JUGADORES_LINEA +
                2);

            // se situan los jugadores en la linea del centro del campo alante
            jugadoresLibres -= miAlineacion[Constantes.LINEA_CENTRO_CAMPO_ATRAS];

            if (jugadoresLibres > Constantes.MAXIMO_JUGADORES_LINEA) {
                miAlineacion[Constantes.LINEA_CENTRO_CAMPO_ALANTE] = Math.abs(new Random().nextInt()) % (jugadoresLibres +
                    1);
            }

            // se situan los jugadores en la linea delantera
            jugadoresLibres -= miAlineacion[Constantes.LINEA_CENTRO_CAMPO_ALANTE];
            miAlineacion[Constantes.LINEA_DELANTERA] = jugadoresLibres;
        } while ((miAlineacion[Constantes.LINEA_DEFENSIVA] < 2) ||
                (miAlineacion[Constantes.LINEA_DEFENSIVA] > 4) ||
                (miAlineacion[Constantes.LINEA_CENTRO_CAMPO_ATRAS] > 4) ||
                (miAlineacion[Constantes.LINEA_CENTRO_CAMPO_ALANTE] > 4) ||
                (miAlineacion[Constantes.LINEA_DELANTERA] > 3) ||
                (miAlineacion[Constantes.LINEA_DELANTERA] < 0));

        return new Alineacion (miAlineacion);
    } // private int[] generarAlineacion()

    public int [] getAlineacion () {
    	return alineacion;
    }


	public static String toString (final Alineacion _alineacion) {

		return _alineacion.alineacion[0] + "-" + _alineacion.alineacion[1] + "-" + _alineacion.alineacion[2] + "-"
				+ _alineacion.alineacion[3] + "\n";
	}


} // public class Alineacion
